package com.cskaoyan.javase.array._5operation._4crud;

/**
 * 关于引用数据类型判断相等？
 *      1."=="连接两个引用,比较的是地址
 *          比较严格的一个比较,只有当两个引用完全指向同一个对象时才会返回true
 *      2.equals方法,来判断两个字符串内容是否一致
 *          "字符串对象的引用/字符串常量".equals("字符串对象的引用/字符串常量");
 *          只要内容一致,都会返回true,不关心别的事情
 *
 * 使用equals方法时,如果左边的方法调用者是一个null,就会导致空指针异常
 * 可以考虑以下解决方法:
 *      1.万能的解决办法,if判断
 *      2.针对String类的equals方法的特殊避免空指针异常的方式:
 *          equals方法是具有对称性的
 *          左右两边的String常量/变量,互相调位置,是不影响结果的
 *          这要求我们在使用equals方法时,尽量将常量/绝不可能为null的变量
 *              作为方法的调用者,以此来避免空指针异常
 *
 * @since 14:21
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));

        // 新的独立的对象
        String s3 = new String("hello");
        System.out.println(s1 == s3);
        System.out.println(s1.equals(s3));
    }
}
